home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
source
/
units
/
knapper.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1994-04-02
|
3KB
|
97 lines
UNIT Knapper;
{$O+,F+}
INTERFACE
CONST INNE=TRUE; UTE=FALSE; { Er knappen presset INN eller UT }
TYPE Knapp=OBJECT
Xa,Xb,Y,Fg,Bg:BYTE; Title:STRING; Paa:BOOLEAN;
PROCEDURE Fjern;
PROCEDURE Tegn(B:BOOLEAN);
PROCEDURE Init(X1,X2,Yp,Dv,Ev:BYTE; Fv:STRING);
FUNCTION Trykket:BOOLEAN;
FUNCTION Byttet:BOOLEAN;
END;
VAR KnappDefPaa:BOOLEAN; { Skal knappen være inne eller ute som def }
Stopp,Beskt,Shell:KNAPP;
IMPLEMENTATION
USES OGWare;
VAR Hl,Sd:ARRAY[0..15] OF BYTE;
PROCEDURE Knapp.Fjern;
VAR C,T,U:BYTE; D:WORD;
BEGIN
C:=Bg*17; D:=Y*80-81;
FOR T:=Xa TO Xb DO FOR U:=0 TO 2 DO MemW[$B800:(T+D+U*80)*2]:=32+C*256;
END;
PROCEDURE Knapp.Tegn(B:BOOLEAN);
VAR T,C,Ov,Nh:BYTE; U:WORD;
BEGIN
MouseSave;
C:=Bg*17; U:=Y*80-81;
IF B=INNE THEN BEGIN Ov:=Sd[Bg]+Bg*16; Nh:=Hl[Bg]+Bg*16; END
ELSE BEGIN Ov:=Hl[Bg]+Bg*16; Nh:=Sd[Bg]+Bg*16; END;
FOR T:=Xa+1 TO Xb-1 DO
BEGIN
MemW[$B800:(T+U)*2 ]:=196+Ov*256;
MemW[$B800:(T+U)*2+160]:= 32+C *256;
MemW[$B800:(T+U)*2+320]:=196+Nh*256;
END;
MemW[$B800:(Xa+U)*2 ]:=218+Ov*256; MemW[$B800:(Xb+U)*2 ]:=191+Nh*256;
MemW[$B800:(Xa+U)*2+160]:=179+Ov*256; MemW[$B800:(Xb+U)*2+160]:=179+Nh*256;
MemW[$B800:(Xa+U)*2+320]:=192+Ov*256; MemW[$B800:(Xb+U)*2+320]:=217+Nh*256;
IF B THEN C:=Sd[Bg]+Bg*16 ELSE C:=Fg+Bg*16;
Title:=COPY(Title,1,(Xb-Xa-1));
U:=Y*80-1+(Xb-Xa-1-LENGTH(Title)) DIV 2;
FOR T:=1 TO LENGTH(Title) DO
BEGIN MemW[$B800:(Xa+T+U)*2]:=ORD(Title[T])+C*256; END;
MouseLoad;
END;
PROCEDURE Knapp.Init(X1,X2,Yp,Dv,Ev:BYTE; Fv:STRING);
BEGIN
Xa:=X1; Xb:=X2; Y:=Yp; Fg:=Dv; Bg:=Ev; Title:=Fv;
Paa:=KnappDefPaa; Tegn(Paa);
END;
FUNCTION Knapp.Trykket:BOOLEAN;
BEGIN
Trykket:=FALSE;
IF (MouseXpos>=Xa) AND (MouseXpos<=Xb) AND
(MouseYpos>=Y) AND (MouseYpos<=Y+2) AND (MouseButton=1) THEN
BEGIN
Tegn(NOT Paa); Beep(200,10);
REPEAT UNTIL MouseButton<>1;
Beep(200,10); Tegn(Paa); Trykket:=TRUE;
IF (MouseXpos<Xa) OR (MouseXpos>Xb) OR
(MouseYpos<Y) OR (MouseYpos>Y+2) THEN Trykket:=FALSE;
END;
END;
FUNCTION Knapp.Byttet:BOOLEAN;
BEGIN
Byttet:=FALSE;
IF (MouseXpos>=Xa) AND (MouseXpos<=Xb) AND
(MouseYpos>=Y) AND (MouseYpos<=Y+2) AND (MouseButton=1) THEN
BEGIN
Paa:=NOT Paa;
Byttet:=TRUE;
Tegn(Paa); Beep(200,10);
REPEAT UNTIL MouseButton<>1;
END;
END;
BEGIN
Sd[00]:=08; Hl[00]:=07; Sd[01]:=00; Hl[01]:=09; Sd[02]:=00; Hl[02]:=10;
Sd[03]:=01; Hl[03]:=11; Sd[04]:=00; Hl[04]:=12; Sd[05]:=00; Hl[05]:=13;
Sd[06]:=00; Hl[06]:=14; Sd[07]:=08; Hl[07]:=15; Sd[08]:=00; Hl[08]:=07;
Sd[09]:=01; Hl[09]:=03; Sd[10]:=02; Hl[10]:=11; Sd[11]:=03; Hl[11]:=15;
Sd[12]:=04; Hl[12]:=14; Sd[13]:=05; Hl[13]:=15; Sd[14]:=06; Hl[14]:=15;
Sd[15]:=08; Hl[15]:=07; KnappDefPaa:=UTE;
END.